<?php

namespace App\Exceptions\Admin\V1;

use Exception;

class AdminException extends Exception
{
    public $errorCode;
    public $errorMsg;
    public $errorHeaders;

    /**
     * 说明：
     * WITHOUT:不存在1
     * EXIST:存在2
     * FAULT:失败3
     * SUCCESS:成功4
     * UNKNOWN:未知5
     * INVALID:非法6
     * ERROR:错误7
     */

    /*模型_控制器_行为_结果；
    01：两位数标识模型；
    01：两位数标识控制器；
    1：一位数标识行为（一般是C（增加1-Create）U（更新2-Update）R（查询3-Retrieve）D（删除4-Delete））；
    1：一位数标识结果（成功失败等）。
    共六位数即可满足
    */

    const ADMIN_LOGIN_RETRIEVE_INVALID = 100133;
    const ADMIN_ADMIN_RETRIEVE_WITHOUT = 100231;

    const ADMIN_ADMIN_CREATE_SUCCESS = 100214;
    const ADMIN_ADMIN_CREATE_FAULT   = 100213;
    const ADMIN_ADMIN_DELETE_INVALID = 100246;
    const ADMIN_ADMIN_SYSTEM_UNKNOWN = 100255;

    const ROLE_ROLE_CREATE_FAULT = 200313;
    const ROLE_ROLE_UPDATE_FAULT = 200323;
    const ROLE_ROLE_DELETE_FAULT = 200333;

    const MENU_MENU_CREATE_FAULT = 300513;
    const MENU_MENU_UPDATE_FAULT = 300523;
    const EXISTS_ADMIN_MENUS_SUB = 300543; // 存在子菜单，无法删除

    #####
    const EXISTS_ADMIN_ROLES_SUB    = 80105; // 存在子角色，无法删除
    const FAULT_ADMIN_USERS_STORE   = 80109; // 新增用户失败
    const FAULT_ADMIN_USERS_UPDATE  = 80110; // 编辑用户失败
    const FORBID_ADMIN_USERS_UPDATE = 80111; // 禁止对超级管理员用户操作
    ####

    /**
     * GeneralException constructor.
     *
     * @param int $errorCode
     * @param null $errorMsg
     * @param Exception|null $previous
     * @param array $headers
     */
    public function __construct($errorCode = 0, $errorMsg = null, \Exception $previous = null, array $headers = array())//, $code = 0
    {
        $this->errorCode = $errorCode;
        $this->errorMsg = $errorMsg ? : trans('exception\v1\admin.' . $errorCode);
        $this->errorHeaders = $headers;

        parent::__construct($this->errorMsg, $this->errorCode, $previous);
    }
}
